<?php namespace Admin\Controller;
use Common\Model\Goods;
//虽然两个类命名空间一样，但是仍然要用一个use一个，不用use的时候是和本文件的命名空间（Admin\Controller）一致的话，就不用use了，但是
//和本文件不一致的话，用一次就要use一次
use Common\Model\TypeAttr;
use Common\Model\Type;
use Common\Model\Detail;
use Common\Model\Brand;
use Common\Model\Cate;
use Common\Model\GoodsAttr;
use Common\Model\GoodsList;
class GoodsController extends CommonController{
	private $model;
	public function __auto(){
	     $this->model=new Goods;
	}
	
	public function index(){
//		获得goods表格中的数据
		$goodsData=$this->model->get();
		View::with('goodsData',$goodsData);
	    View::make();
	}
	
	public function add(){
		
		if(IS_POST){
			if(!$this->model->store())  View::error($this->model->getError());
			View::success('添加成功',U('index'));
		}
		
		//获得分类表格中的数据 
		$catedata=Db::table('shop_category')->orderBy('sort','ASC')->get();
		//有分类数据得到树状图
//		Data::tree($data, $title, $fieldPri = 'cid', $fieldPid = 'pid');
		$catedata=Data::tree($catedata,'cname','cid','pid');
		
		//获得商品品牌的数据
		$branddata=Db::table('shop_brand')->orderBy('sort','ASC')->get();

		View::with(['catedata'=>$catedata,'branddata'=>$branddata]);
		
	    View::make();
	}
	
	
	//这个方法是为了让ajax提交数据时候使用，获得类型属性
	public function getAttr(){
		//得到类型id,为什么要给个默认值？？？
		$shop_type_tid=Q('post.t',0,'intval');
		//通过类型id找到类型属性
		$typeAttrModel=new TypeAttr;
		$data=$typeAttrModel->where("shop_type_tid={$shop_type_tid}")->get();
		foreach ($data as $k=>$v){
			//因为类型属性的属性值包括很多值，所以要把字符串变成数组，将来好循环
			$data[$k]['tavalue']=explode('，', $v['tavalue']);
		}
//		这里通过echo出转换成json的数据，这是一个信号，就是返回给ajax
		echo json_encode($data);
		
		
		//这里有个exit；在这里很有讲究就是不带掉的话，很可能带来不确定性错误，所以为了保险起见，带掉
		exit;	   
	}
	
	
	    //uploadify异步上传
	public function upload()
	{
	    $file = Upload::path('Upload/Content/' . date('y/m'))->make();
	    if (empty($file)) {
	        // 相当于：echo json_encode(Upload::getError());exit;
	        $this->ajax(Upload::getError());
	    } else {
	        /** $file内部就是以下这个数组
	            $file = array(
	                0 => array(
		                'path' => 'Upload/Content/15/8/123981239172.jpg'    ,
		                'url' => 'http://localhost/cms_edu/Upload/Content/15/8/123981239172.jpg',
		                'image' => 1
	            ),
	        );**/
	        //上传成功，把上传好的信息返给js 也就是uploadify
	        $data = $file[0];
	        // 相当于：echo json_encode($data);exit;
	        $this->ajax($data);
	    }
	}
	
	
	
	
		//ajax删除上传后又被取消的图片
	public function delImg(){
		//这个地方不能给默认值，给了就删不掉文件，why？？？
	    $path=Q('post.v');
		unlink($path);
		
		exit;	
	} 
	
	
	
	//编辑商品
	public function edit(){
		
		
		if(IS_POST){
			if(!$this->model->edit()) View::error($this->model->getError());
			View::success('操作成功','index',2);
			
//			View::success('修改成功',U('index'));
		}
	
		//	1、获得旧数据
		$gid=Q('get.gid',0,'intval');
		$oldData=$this->model
				->join('shop_detail','gid','=','shop_goods_gid')
				->where("gid={$gid}")
				->find();
//		把数据打包成我们想要的样子，便于循环出来处理

		$arr=explode('|', $oldData['big']);
		foreach ($arr as $k => $v) {
			if($v){
				$newArr[]=$v;
			}
		}
		
		$oldData['big']=$newArr;
//		p($oldData);
		View::with('oldData',$oldData);
//		2、处理所属分类
		$cateModel=new Cate;
		$cateData=$cateModel->getAll();
//		p($cateData);
		View::with('cateData',$cateData);
		
//		3、获得品牌的数据
		$brandModel=new Brand;
		$brandData=$brandModel->get();
		View::with('brandData',$brandData);
		
		
		
		//4、处理商品属性和规格
		
		$goodsAttrModel=new GoodsAttr;
		$goodsAttrData=$goodsAttrModel
						->join('shop_type_attr','taid','=','shop_type_attr_taid')
						->where("shop_goods_gid={$gid}")
						->get();
//		p($goodsAttrData);
		//获得taid，就是为了以后排除已经选过的类型属性
		$taid=[];
		foreach ($goodsAttrData as $k => $v) {
			//注意下面地方的，号，是中文逗号，和英文逗号咱的字节不一样 
			$goodsAttrData[$k]['tavalue']=explode('，', $v['tavalue']);
			$taid[]=$v['taid'];
		}
		//把商品没有选过的属性也要拿出来，有可能以前没有选择，现在想选择了
		$typeAttrModel=new TypeAttr;
		$taidStr=implode(',', $taid);
		$typeAttr=$typeAttrModel->where("taid NOT IN ({$taidStr}) AND shop_type_tid={$oldData['shop_type_tid']}")->get();
//		p($typeAttr);
		foreach ($typeAttr as $v) {
			$goodsAttrData[]=array(
				'taid'=>$v['taid'],
				'added'=>0,
				'gtvalue'=>'',
				'taname'=>$v['taname'],
				'tavalue'=>explode('，', $v['tavalue']),
				'class'=>$v['class']
			);
		}
		
//		p($goodsAttrData);exit;
		View::with('goodsAttrData',$goodsAttrData);
		
		View::make();
	}



	public function del(){
		$gid=Q('get.gid',0,'intval');
//	   	1、删除商品表
		$oldData=$this->model->where("gid={$gid}")->find();
		
		unlink($oldData['pic']);
		$this->model->delete("{$gid}");
//		2、删除商品属性表
		$goodsAttrModel=new GoodsAttr;
		$goodsAttrModel->where("shop_goods_gid={$gid}")->delete();
		
		
		//3、删除商品详情表，并且包括删除商品图册
		$detailModel=new Detail;
		$detailData=$detailModel->where("shop_goods_gid={$gid}")->find();
		//判断是否添加了新图片 ,只有有就删除旧的数据，意思是说没有判断添加几张，只要有添加旧的全删了，是个自己种下的bug
		
		$big=$detailData['big'];
		$big=explode('|', $big);
		foreach ($big as $k => $v) {
			if($v){
				$newBig[]=$v;
			} 
		}
			
		foreach ($newBig as $k => $v) {
			$bigPath=$v;
			unlink($v);
			//strrchr()方法，获得最后一次.出现位置往后的数据
			$type=strrchr($bigPath,'.');
			//形成新的地址
			//替换字符串
			$newMiddlePath=str_replace($type,'_middle'.$type, $bigPath);
				//缩略图中等图片
			unlink($newMiddlePath);
				//缩略图小图片
			$newSmallPath=str_replace($type,'_small'.$type,$bigPath);
			unlink($newSmallPath);
		}
		$detailData=$detailModel->where("shop_goods_gid={$gid}")->delete();
		
		
//		4、删除货品列表
		$goodsListModel=new GoodsList;
		$goodsListModel->where("shop_goods_gid={$gid}")->delete();
		
		//全部删除后
		View::success('删除成功');
		
	}



}